package otel

import (
	"context"

	"go.opentelemetry.io/otel"
	"go.opentelemetry.io/otel/trace"

	ztrace "github.com/zeromicro/go-zero/core/trace"
)

//OpenTelemetry 的 go sdk 实现调用链拦截的基本思路是：
//基于 AOP 的思想，采用装饰器模式，
//通过包装替换目标包（如 net/http）的核心接口或组件，
//实现在核心调用过程前后添加 Span 相关逻辑。
//当然，这样的做法是有一定的侵入性的，
//需要手动替换使用原接口实现的代码调用改为包装接口实现。

func StartSpan(ctx context.Context, method string) (context.Context, trace.Span) {
	tracer := otel.Tracer(ztrace.TraceName)
	return tracer.Start(ctx, method, trace.WithSpanKind(trace.SpanKindInternal))
}
